package main

import (
	"fmt"
	"time"
)

type user struct {
	name string
	age  int8
}

var u = user{name: "Ankur", age: 25}
var g = &u

func modifyUser(pu *user) {
	fmt.Println("modifyUser Received Vaule", pu, &pu)
	fmt.Printf("modifyUser 指针变量 pu 的值 %p \n", pu)
	pu.name = "Anand"
}
func printUser(u <-chan *user) {
	time.Sleep(2 * time.Second)
	fmt.Printf("通过通道传递过来的数据，指针变量 user 的值 %p \n", <-u)
	//fmt.Println("通过通道传递过来的数据", <-u)
	//var user = <-u
	//fmt.Println("printUser Received Vaule", &user)
	////fmt.Printf("通过通道传递过来的数据，指针变量 user 的值 %p \n", <-u)
	//user.name = "ionc"
}
func main() {
	// 创建一个切片
	slice := []int{1, 2, 3, 4, 5}

	// 打印切片的地址
	fmt.Printf("切片 slice 的地址: %p\n", &slice)

	// 打印切片的内容
	fmt.Printf("切片 slice 的内容: %v\n", slice)

	// 打印切片的底层数组的地址
	if len(slice) > 0 {
		fmt.Printf("切片 slice 底层数组的地址: %p\n", &slice[0])
	} else {
		fmt.Println("切片为空，无法获取底层数组的地址")
	}
	//输出 u 的地址

	fmt.Printf("u的地址 %p \n", u)
	fmt.Printf("指针变量g的地址 %p  \n", &g)
	fmt.Printf("指针变量g的值 %p \n", g)
	c := make(chan *user, 5)
	c <- g
	fmt.Printf("指针变量g的值（地址指向）的值 %+v \n", g)
	// modify g
	g = &user{name: "Ankur Anand", age: 100}
	fmt.Printf("指针变量g的值 %p \n", g)
	go printUser(c)
	go modifyUser(g)
	time.Sleep(50 * time.Second)
	fmt.Println(g)
	fmt.Println("main goRoutine called", u)
}
